#!/bin/bash

# 获取 Linux 发行版信息
detect_os() {
    if [[ -f /etc/os-release ]]; then
        . /etc/os-release
        echo "$ID"
    elif [[ -f /etc/redhat-release ]]; then
        echo "rhel"
    else
        echo "unknown"
    fi
}

# 使用说明
usage() {
    echo "用法: $0 <服务名> [时间范围] [匹配关键字]"
    echo "示例: $0 nginx '10 min ago' 'error|fail|timeout'"
    exit 1
}

# 通用日志分析函数（自动适配不同发行版）
check_logs() {
    local service="$1"   # 传入要监控的服务名
    local timeframe="${2:-'5 min ago'}" # 传入时间范围，默认 5 分钟
    local keywords="${3:-'error|fail|timeout'}"  # 传入匹配关键字，默认匹配常见错误

    echo "===== 检查 $service 日志（最近 $timeframe） ====="

    # 获取当前 Linux 发行版
    OS_TYPE=$(detect_os)

    # systemd 日志（适用于大多数现代 Linux）
    if systemctl list-units --type=service | grep -q "$service"; then
        journalctl -u "$service" --since "$timeframe" | grep -E "$keywords"
    fi

    # dmesg 系统日志（适用于硬件或内核错误）
    dmesg -T | grep -Ei "$keywords"

    # 适配不同 Linux 发行版的日志路径
    case "$OS_TYPE" in
        ubuntu|debian)
            log_files=("/var/log/syslog" "/var/log/$service.log")
            ;;
        centos|rhel|rocky|almalinux)
            log_files=("/var/log/messages" "/var/log/$service.log")
            ;;
        *)
            log_files=("/var/log/$service.log")
            ;;
    esac

    # 逐个检查日志文件
    for log_file in "${log_files[@]}"; do
        if [[ -f "$log_file" ]]; then
            echo "=== 检查 $log_file ==="
            tail -100 "$log_file" | grep -E "$keywords"
        fi
    done
}

# 检查是否提供服务名参数
if [[ -z "$1" ]]; then
    usage
fi

# 运行日志检查
check_logs "$1" "$2" "$3"
